package reusingclass;


public class Exercise2 {
	
	public static void main(String[] args) {
		PowerDetergent pd = new PowerDetergent();
		pd.dilute();
		pd.apply();
		pd.scrub();
		pd.foam();
		System.out.println(pd);
		System.out.println("Testing base class:");
		Detergent.main(args);
	}
	
}

class Cleanser { 
  private String s = "Cleanser"; 
  public void append(String a) { s += a; } 
  public void dilute() { append(" dilute()"); } 
  public void apply() { append(" apply()"); } 
  public void scrub() { append(" scrub()"); } 
  public String toString() { return s; } 
  public static void main(String[] args) { 
    Cleanser x = new Cleanser(); 
    x.dilute(); x.apply(); x.scrub(); 
    System.out.println(x); 
  } 
}    
 
class Detergent extends Cleanser { 
  // Change a method: 
  public void scrub() { 
    append(" Detergent.scrub()"); 
    super.scrub(); // Call base-class version 
  } 
  // Add methods to the interface: 
  public void foam() { append(" foam()"); } 
  // Test the new class: 
  public static void main(String[] args) { 
    Detergent x = new Detergent(); 
    x.dilute(); 
    x.apply(); 
    x.scrub(); 
    x.foam(); 
    System.out.println(x); 
    System.out.println("Testing base class:"); 
    Cleanser.main(args); 
  }  
} 

class PowerDetergent extends Detergent {
	
	@Override public void scrub() {
		append("PowerDetergent.scrub()");
	}
	
	public void sterilize() {
		System.out.println("PowerDetergent.sterilize()");
	}
	
}